package logic

import (
	"common/rabbitmq"
	"context"
	"errors"
	"product_server/dao/dao_redis"
	product "product_server/proto"
)

// CartItem 购物车商品项
type CartItem struct {
	ProductId int64   `json:"productId"`
	Price     float64 `json:"price"`
	Num       int64   `json:"num"`
	Name      string  `json:"name"`
}

// CheckoutCar 购物车结算 - 全部商品结算
func (p *ProductServer) CheckoutCar(ctx context.Context, req *product.CheckoutCarRequest) (*product.CheckoutCarResponse, error) {
	// 获取用户购物车所有商品
	allCartItems, err := dao_redis.CarList(req.Uid)
	if err != nil {
		return nil, errors.New("获取购物车信息失败")
	}

	if len(allCartItems) == 0 {
		return nil, errors.New("购物车为空")
	}

	// 计算总价和构建商品列表
	var (
		totalPrice   float64
		totalNum     int64
		cartItems    []CartItem
		productNames []string
	)

	for _, item := range allCartItems {
		// 计算单个商品总价
		itemTotal := float64(item.Price) * float64(item.Num)
		totalPrice += itemTotal
		totalNum += item.Num

		// 添加到商品列表
		cartItems = append(cartItems, CartItem{
			ProductId: item.ProductId,
			Price:     float64(item.Price),
			Num:       item.Num,
			Name:      item.StoreName,
		})

		productNames = append(productNames, item.StoreName)
	}

	// 构建订单数据
	orderData := map[string]interface{}{
		"userId":       req.Uid,
		"productId":    int64(0), // 购物车结算标识
		"price":        totalPrice,
		"num":          totalNum,
		"name":         "购物车商品",
		"orderType":    int64(1),
		"cartItems":    cartItems,
		"productNames": productNames,
	}

	// 发送到消息队列
	err = rabbitmq.SimLpePublish(orderData)
	if err != nil {
		return nil, errors.New("订单处理失败：" + err.Error())
	}

	return &product.CheckoutCarResponse{Success: true}, nil
}

//// CheckoutCar 购物车结算 - 支持多商品选择结算
//func (p *ProductServer) CheckoutCar(ctx context.Context, req *product.CheckoutCarRequest) (*product.CheckoutCarResponse, error) {
//	// 获取用户购物车所有商品
//	allCartItems, err := dao_redis.CarList(req.Uid)
//	if err != nil {
//		return nil, errors.New("获取购物车信息失败")
//	}
//
//	if len(allCartItems) == 0 {
//		return nil, errors.New("购物车为空")
//	}
//
//	// 确定要结算的商品
//	var cartItemsToCheckout []*product.CarList
//	if len(req.ProductIds) > 0 {
//		// 结算指定的多个商品
//		productIdMap := make(map[int64]bool)
//		for _, id := range req.ProductIds {
//			productIdMap[id] = true
//		}
//
//		for _, item := range allCartItems {
//			if productIdMap[item.ProductId] {
//				cartItemsToCheckout = append(cartItemsToCheckout, item)
//			}
//		}
//	} else {
//		// 结算全部商品
//		cartItemsToCheckout = allCartItems
//	}
//
//	if len(cartItemsToCheckout) == 0 {
//		return nil, errors.New("没有可结算的商品")
//	}
//
//	// 计算总价和构建商品列表
//	var (
//		totalPrice   float64
//		totalNum     int64
//		cartItems    []CartItem
//		productNames []string
//	)
//
//	for _, item := range cartItemsToCheckout {
//		// 计算单个商品总价
//		itemTotal := float64(item.Price) * float64(item.Num)
//		totalPrice += itemTotal
//		totalNum += item.Num
//
//		// 添加到商品列表
//		cartItems = append(cartItems, CartItem{
//			ProductId: item.ProductId,
//			Price:     float64(item.Price),
//			Num:       item.Num,
//			Name:      item.StoreName,
//		})
//
//		productNames = append(productNames, item.StoreName)
//	}
//
//	// 构建订单数据
//	orderData := map[string]interface{}{
//		"userId":       req.Uid,
//		"productId":    int64(0), // 购物车结算标识
//		"price":        totalPrice,
//		"num":          totalNum,
//		"name":         "购物车商品",
//		"orderType":    int64(1),
//		"cartItems":    cartItems,
//		"productNames": productNames,
//	}
//
//	// 发送到消息队列
//	err = rabbitmq.SimLpePublish(orderData)
//	if err != nil {
//		return nil, errors.New("订单处理失败：" + err.Error())
//	}
//
//	return &product.CheckoutCarResponse{Success: true}, nil
//}
